What are conflicting changes and why do I sometimes receive errors about this?
Background: When existing records in a database are modified by multiple users at the same time, it is possible for one user's changes to be overwritten by another's. If both users initially access the record at the same time, the first user will not be aware of the other user's changes - and the other user will be unaware that the record is about to be replaced with an alternate version created by the first user. This is known as a concurrency problem.
In ContactsLaw, records may be accessed simultaneously by several users. If two users try to make changes at the same time, this would result in a concurrency problem - and one of the users' changes would be negated.
For some types of records (e.g. fixed charges, disbursement types, etc) there is no consequence if one member's changes are superseded by another's, because the records are atomic (i.e. all fields describe a single, independent piece of information only). However, for more complex records and those whose state changes between steps in a workflow (e.g. contacts, files, documents and accounting transactions), conflicting changes must not be allowed.
ContactsLaw uses a combination of techniques to prevent one member's changes from being overwritten by another member's changes:
- Timestamps - Each time a change is made to a record, ContactsLaw adds the member, date and time on which the change was made. When the record is updated, it will compare the timestamp on the record in memory with the timestamp on the record in the database; if they match, the update will be permitted, but if they differ, ContactsLaw will reject the changes and display an error message.
- Network notifications - When certain types of records are updated by one user, a notification will be sent to all other users on the network, informing their copies of ContactsLaw that the record has been changed. In some cases, ContactsLaw will simply reload the record to obtain the latest version. In others, the user will be notified of the changes and forced to discard their own.
Different types of records employ slightly different measures to prevent concurrency problems. If you receive a message about conflicting changes while using ContactsLaw, it will be because another user (or, in some cases, yourself) has made a change to the record since you loaded it. You should review those changes before proceeding with your own update.